/*
 *  Copyright 2010 Yuri Kanivets
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *  http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */

package com.hj.ct.wheelview;

/**
 * Numeric Wheel adapter.
 */
public class NumericWheelAdapter implements WheelAdapter {
	
	public static final int EXTRA_FROM_ADD_10 = 100;
	
	/** The default min value */
	public static final int DEFAULT_MAX_VALUE = 9;
	
	/** The default max value */
	private static final int DEFAULT_MIN_VALUE = 0;
	public static final int FORM_WHEELDIALOG_AGELEN  = 1;
	/** floor*/
	public static final int FORM_WHEELDIALOG_FLOOR  = 2;
	
	// Values
	private int minValue;
	private int maxValue;
	private int mType;
	
	// format
	private String format;
	
	/**
	 * Default constructor
	 */
	public NumericWheelAdapter() {
		this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE);
	}
	
	/**
	 * Constructor
	 * 
	 * @param minValue
	 *            the wheel min value
	 * @param maxValue
	 *            the wheel max value
	 */
	public NumericWheelAdapter(int minValue, int maxValue) {
		this(minValue, maxValue, null);
	}
	
	/**
	 * Constructor
	 * 
	 * @param minValue
	 *            the wheel min value
	 * @param maxValue
	 *            the wheel max value
	 * @param format
	 *            the format string
	 */
	public NumericWheelAdapter(int minValue, int maxValue, String format) {
		this.minValue = minValue;
		this.maxValue = maxValue;
		this.format = format;
	}
	
	/**
	 * Constructor
	 * 
	 * @param minValue
	 *            the wheel min value
	 * @param maxValue
	 *            the wheel max value
	 * @param type
	 *            the type value
	 */
	public NumericWheelAdapter(int minValue, int maxValue, int type) {
		this.minValue = minValue;
		this.maxValue = maxValue;
		this.mType = type;
	}
	
	public NumericWheelAdapter(int minValue, int maxValue, String format, int type) {
		this.minValue = minValue;
		this.maxValue = maxValue;
		this.format = format;
		this.mType = type;
	}
	
	@Override
	public String getItem(int index) {
		if (index >= 0 && index < getItemsCount()) {
			int value;
			if (mType == EXTRA_FROM_ADD_10) {
				value = (minValue + index) * 10;//0 1 2 3 4 5
			} else if(mType ==FORM_WHEELDIALOG_AGELEN){
				if(index==0){
					return "不限";
				}else{
					value = minValue-1 + index;
				}
			} else if (mType == FORM_WHEELDIALOG_FLOOR) {
				if (index + minValue >= 0) {
					value = minValue + index + 1;
				} else {
					value = minValue + index;
				}
			} else {
				value = minValue + index;//0 1 2 3 4 5
			}
			return format != null ? String.format(format, value) : Integer.toString(value);
		}
		return null;
	}
	
	@Override
	public int getItemsCount() {
		if (mType == EXTRA_FROM_ADD_10) {
			return (maxValue - minValue) / 10 + 1;
		}else if(mType == FORM_WHEELDIALOG_AGELEN){
			return maxValue - minValue + 2;
		}else if (mType == FORM_WHEELDIALOG_FLOOR) { 
			return maxValue - minValue;
		} else {
			return maxValue - minValue + 1;
		}
	}
	
	@Override
	public int getMaximumLength() {
		int max = Math.max(Math.abs(maxValue), Math.abs(minValue));
		int maxLen = Integer.toString(max).length();
		if(mType == FORM_WHEELDIALOG_AGELEN){
			maxLen = maxLen*2;
		}
		if (minValue < 0) {
			maxLen++;
		}
		return maxLen;
	}
}
